In [46]:
from IPython.parallel import Client

import preservevars

c = Client()
dv = c[:]
dv.block = True

In [47]:
def get_gl ():
    return dict((k, str(v)) for k, v in globals().iteritems())

# set up some globals
dv['x'] = 5
# get initial globals
g0 = dv.apply(get_gl)
# do something
with preservevars.PreserveVars(dv, x = 7, y = 1):
    print dv.apply(lambda: (x, y))
# get final globals
g1 = dv.apply(get_gl)
# check globals are the same
for a, b in zip(g0, g1):
    for k in set(a.keys() + b.keys()):
        if k not in a or k not in b or a[k] != b[k]:
            print k


[[7, 1], [7, 1]]
_4bbbbedba11c4a308d3838ac61cf17e4_kwargs
_236a3d085d054b2d8e2ec674c4f0cd8c_f
_4bbbbedba11c4a308d3838ac61cf17e4_args
_4bbbbedba11c4a308d3838ac61cf17e4_f
_236a3d085d054b2d8e2ec674c4f0cd8c_args
_4bbbbedba11c4a308d3838ac61cf17e4_result
_236a3d085d054b2d8e2ec674c4f0cd8c_kwargs
_236a3d085d054b2d8e2ec674c4f0cd8c_result
_c25aa24d7412473bbefb9e81d98e375c_args
_18b2a6c190fb4f56b96358a94e7bcf55_result
_18b2a6c190fb4f56b96358a94e7bcf55_args
_18b2a6c190fb4f56b96358a94e7bcf55_f
_18b2a6c190fb4f56b96358a94e7bcf55_kwargs
_c25aa24d7412473bbefb9e81d98e375c_kwargs
_c25aa24d7412473bbefb9e81d98e375c_result
_c25aa24d7412473bbefb9e81d98e375c_f